﻿#pragma once

#include <iostream>
#include <functional>
namespace yzrilyzr_type{
	template<typename T>
	class Property{
		private:
		T _value;
		std::function<void()> _callback; // 用于存储回调函数

		public:
			// 构造函数初始化值和回调函数
		Property(T value, std::function<void()> callback) : _value(value), _callback(callback){}

		// 重载赋值运算符
		Property & operator=(const T & value){
			if(_value != value){ // 检查值是否改变
				_value=value;
				if(_callback){
					_callback(); // 修改_value时调用回调函数
				}
			}
			return *this;
		}

		// Getter for _value
		T getValue() const{
			return _value;
		}

		// 转换运算符，以便直接获取值
		operator T() const{
			return _value;
		}
	};
}